<?php
/**
 * 版本：1.0
 * 作者：Lane<61647649@qq.com>
 * 日期：2015-10-04
 * 内容： 使用方法 将crond_index.php 写入crond服务中，每分钟执行一次,  每一个项目如果要使用CROND，都需要创建一个此
 * 文件并且修改APP_NAME， 另外， 如果不是后台程序控制添加CROND，需要自己在data目录下创建 task_list.php文件,并自己填写
 * crond的文件名
 * <?php
 * $task_list = array(
 *  '*' => array('CROND_TEST.PHP'),//TEST
 * );
 */
$time_start = microtime(true);
define('APP_NAME', 'www'); 
define('__THIS__', strtr(__FILE__, array('\\' => '/', '/crond_index.php' => '', '\crond_index.php' => '')));
require __THIS__."/../../core/init.php";

/* 永不超时 */
ini_set('max_execution_time', 0);

function crond()
{
    // 当前应用需要执行的定时任务是不是存在
    if (file_exists(PATH_DATA."/task_list.php")) 
    {
        // 引入计划定时任务的所有文件
        include PATH_DATA.'/task_list.php';

        // 提取当前需要执行的文件
        $exe_file = array();
        foreach (config('CROND_TIMER') as $format) 
        {
            $key = date($format, ceil(time()));
            if (is_array(@$task_list[$key])) 
            {
                $exe_file = array_merge($exe_file, $task_list[$key]);
            }
        }

        /* 加载需要执行的文件 */
        if (!empty($exe_file)) 
        {
            foreach ($exe_file as $file) 
            {
                // 过滤掉所有带路径的crond文件,只留下文件不要路径，防止其他目录的文件被执行，这很危险
                $pathinfo = pathinfo($file);
                // echo '<pre>';print_r($pathinfo);echo '</pre>';
                if (empty($pathinfo['basename'])) 
                {
                    // 证明没有文件要执行， 想要执行一个目录
                    continue;
                }

                $file = $pathinfo['basename'];
                echo "执行crond --- {$file}\n";

                $runtime_start = microtime(true);
                // 引入执行文件绝对路径 
                if (!file_exists(PATH_CROND.'/'.$file)) 
                {
                    echo "没有找到文件{$file}.\n\n";
                }
                else 
                {
                    include PATH_CROND.'/'.$file;
                }
                $runtime = microtime(true) - $runtime_start;
                echo "{$file}, 执行时间: {$runtime}\n\n";
            }
        }

        $time_total = microtime(true) - $GLOBALS['_beginTime'];
        echo "total:{$time_total}\n";
    }
}

exit(crond());


